Report generated on 16-Nov-2023 at 10:26:38 by pytest-html v3.1.1
4 tests ran in 147.87 seconds.
(Un)check the boxes to filter the results.
0 passed, 0 skipped, 4 failed, 0 errors, 0 expected failures, 0 unexpected passes, 0 rerun| Result | Test | Duration | Links |
|---|---|---|---|
| No results found. Try to check the filters | |||
| Failed | tests/devhub_submissions/test_addon_submissions.py::test_submit_listed_wizard_theme_tc_id_c97500[Desktop] | 56.60 | Driver Log URL HTML Driver Log |
|
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="7a287e33-2e39-4c7c-88f2-99050eef5408")>, base_url = 'https://addons.mozilla.org' variables = {'addon_validation_message': 'Your add-on was validated with no errors or warnings.', 'addon_with_stats': 'new-tab-override', 'all_scores_addon': 'ublock-origin', 'base_url': 'https://addons.mozilla.org', ...} wait = <[AttributeError("'function' object has no attribute 'session_id'") raised in repr()] WebDriverWait object at 0x1078604d0>, delete_themes = None @pytest.mark.sanity @pytest.mark.failing def test_submit_listed_wizard_theme_tc_id_c97500(selenium, base_url, variables, wait, delete_themes): """A test that checks a straight-forward theme submission with the devhub wizard""" page = DevHubHome(selenium, base_url).open().wait_for_page_to_load() page.devhub_login("submissions_user") submit_addon = page.click_submit_theme_button() # start the upload for a listed theme submit_addon.select_listed_option() submit_addon.click_continue() create_theme = submit_addon.click_create_theme_button() theme_name = f"wizard_theme_{reusables.get_random_string(5)}" create_theme.set_theme_name(theme_name) create_theme.upload_theme_header("theme_header.png") wait.until(lambda _: create_theme.uploaded_image_preview.is_displayed()) # make a note of the image source uploaded as the theme header uploaded_img_source = create_theme.uploaded_image_source # verify that the uploaded image is applied in the browser preview assert uploaded_img_source == create_theme.browser_preview_image theme_details = create_theme.submit_theme() # check that the name set earlier carried over assert theme_name in theme_details.addon_name_field.get_attribute("value") theme_details.set_addon_summary("Theme summary") # select a category for the theme > theme_details.theme_category_abstract.click() tests/devhub_submissions/test_addon_submissions.py:95: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pages/desktop/developers/submit_addon.py:672: in theme_category_abstract return self.find_element(*self._theme_category_abstract_locator) venv/lib/python3.11/site-packages/pypom/view.py:34: in find_element return self.driver_adapter.find_element(strategy, locator) venv/lib/python3.11/site-packages/pypom/selenium_driver.py:61: in find_element return self.driver.find_element(strategy, locator) venv/lib/python3.11/site-packages/selenium/webdriver/remote/webdriver.py:856: in find_element return self.execute(Command.FIND_ELEMENT, { venv/lib/python3.11/site-packages/selenium/webdriver/remote/webdriver.py:429: in execute self.error_handler.check_response(response) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <selenium.webdriver.remote.errorhandler.ErrorHandler object at 0x1075101d0> response = {'status': 404, 'value': '{"value":{"error":"no such element","message":"Unable to locate element: #id_categories > di.../content/shared/webdriver/Errors.sys.mjs:507:5\\ndom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:132:16\\n"}}'} def check_response(self, response: Dict[str, Any]) -> None: """ Checks that a JSON response from the WebDriver does not have an error. :Args: - response - The JSON response from the WebDriver server as a dictionary object. :Raises: If the response contains an error message. """ status = response.get('status', None) if not status or status == ErrorCode.SUCCESS: return value = None message = response.get("message", "") screen: str = response.get("screen", "") stacktrace = None if isinstance(status, int): value_json = response.get('value', None) if value_json and isinstance(value_json, str): import json try: value = json.loads(value_json) if len(value.keys()) == 1: value = value['value'] status = value.get('error', None) if not status: status = value.get("status", ErrorCode.UNKNOWN_ERROR) message = value.get("value") or value.get("message") if not isinstance(message, str): value = message message = message.get('message') else: message = value.get('message', None) except ValueError: pass exception_class: Type[WebDriverException] if status in ErrorCode.NO_SUCH_ELEMENT: exception_class = NoSuchElementException elif status in ErrorCode.NO_SUCH_FRAME: exception_class = NoSuchFrameException elif status in ErrorCode.NO_SUCH_SHADOW_ROOT: exception_class = NoSuchShadowRootException elif status in ErrorCode.NO_SUCH_WINDOW: exception_class = NoSuchWindowException elif status in ErrorCode.STALE_ELEMENT_REFERENCE: exception_class = StaleElementReferenceException elif status in ErrorCode.ELEMENT_NOT_VISIBLE: exception_class = ElementNotVisibleException elif status in ErrorCode.INVALID_ELEMENT_STATE: exception_class = InvalidElementStateException elif status in ErrorCode.INVALID_SELECTOR \ or status in ErrorCode.INVALID_XPATH_SELECTOR \ or status in ErrorCode.INVALID_XPATH_SELECTOR_RETURN_TYPER: exception_class = InvalidSelectorException elif status in ErrorCode.ELEMENT_IS_NOT_SELECTABLE: exception_class = ElementNotSelectableException elif status in ErrorCode.ELEMENT_NOT_INTERACTABLE: exception_class = ElementNotInteractableException elif status in ErrorCode.INVALID_COOKIE_DOMAIN: exception_class = InvalidCookieDomainException elif status in ErrorCode.UNABLE_TO_SET_COOKIE: exception_class = UnableToSetCookieException elif status in ErrorCode.TIMEOUT: exception_class = TimeoutException elif status in ErrorCode.SCRIPT_TIMEOUT: exception_class = TimeoutException elif status in ErrorCode.UNKNOWN_ERROR: exception_class = WebDriverException elif status in ErrorCode.UNEXPECTED_ALERT_OPEN: exception_class = UnexpectedAlertPresentException elif status in ErrorCode.NO_ALERT_OPEN: exception_class = NoAlertPresentException elif status in ErrorCode.IME_NOT_AVAILABLE: exception_class = ImeNotAvailableException elif status in ErrorCode.IME_ENGINE_ACTIVATION_FAILED: exception_class = ImeActivationFailedException elif status in ErrorCode.MOVE_TARGET_OUT_OF_BOUNDS: exception_class = MoveTargetOutOfBoundsException elif status in ErrorCode.JAVASCRIPT_ERROR: exception_class = JavascriptException elif status in ErrorCode.SESSION_NOT_CREATED: exception_class = SessionNotCreatedException elif status in ErrorCode.INVALID_ARGUMENT: exception_class = InvalidArgumentException elif status in ErrorCode.NO_SUCH_COOKIE: exception_class = NoSuchCookieException elif status in ErrorCode.UNABLE_TO_CAPTURE_SCREEN: exception_class = ScreenshotException elif status in ErrorCode.ELEMENT_CLICK_INTERCEPTED: exception_class = ElementClickInterceptedException elif status in ErrorCode.INSECURE_CERTIFICATE: exception_class = InsecureCertificateException elif status in ErrorCode.INVALID_COORDINATES: exception_class = InvalidCoordinatesException elif status in ErrorCode.INVALID_SESSION_ID: exception_class = InvalidSessionIdException elif status in ErrorCode.UNKNOWN_METHOD: exception_class = UnknownMethodException else: exception_class = WebDriverException if not value: value = response['value'] if isinstance(value, str): raise exception_class(value) if message == "" and 'message' in value: message = value['message'] screen = None # type: ignore[assignment] if 'screen' in value: screen = value['screen'] stacktrace = None st_value = value.get('stackTrace') or value.get('stacktrace') if st_value: if isinstance(st_value, str): stacktrace = st_value.split('\n') else: stacktrace = [] try: for frame in st_value: line = frame.get("lineNumber", "") file = frame.get("fileName", "<anonymous>") if line: file = f"{file}:{line}" meth = frame.get('methodName', '<anonymous>') if 'className' in frame: meth = "{}.{}".format(frame['className'], meth) msg = " at %s (%s)" msg = msg % (meth, file) stacktrace.append(msg) except TypeError: pass if exception_class == UnexpectedAlertPresentException: alert_text = None if 'data' in value: alert_text = value['data'].get('text') elif 'alert' in value: alert_text = value['alert'].get('text') raise exception_class(message, screen, stacktrace, alert_text) # type: ignore[call-arg] # mypy is not smart enough here > raise exception_class(message, screen, stacktrace) E selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: #id_categories > div:nth-child(1) > label E Stacktrace: E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8 E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:189:5 E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:507:5 E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:132:16 venv/lib/python3.11/site-packages/selenium/webdriver/remote/errorhandler.py:243: NoSuchElementExceptionselenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="7a287e33-2e39-4c7c-88f2-99050eef5408")>, base_url = 'https://addons.mozilla.org' @pytest.fixture def delete_themes(selenium, base_url): """Use this fixture in devhub theme submission tests when we want to immediately delete the theme once the test has completed""" yield from pages.desktop.developers.devhub_home import DevHubHome page = DevHubHome(selenium, base_url).open().wait_for_page_to_load() manage_addons = page.click_my_addons_header_link() manage_addons.click_on_my_themes() while len(manage_addons.addon_list) > 0: addon = manage_addons.addon_list[0] > edit = addon.click_addon_name() tests/conftest.py:210: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pages/desktop/developers/addons_manage.py:64: in click_addon_name self.find_element(*self._addon_edit_link_locator).click() venv/lib/python3.11/site-packages/pypom/region.py:106: in find_element return self.driver_adapter.find_element(strategy, locator, root=self.root) venv/lib/python3.11/site-packages/pypom/selenium_driver.py:60: in find_element return root.find_element(strategy, locator) venv/lib/python3.11/site-packages/selenium/webdriver/remote/webelement.py:419: in find_element return self._execute(Command.FIND_CHILD_ELEMENT, venv/lib/python3.11/site-packages/selenium/webdriver/remote/webelement.py:396: in _execute return self._parent.execute(command, params) venv/lib/python3.11/site-packages/selenium/webdriver/remote/webdriver.py:429: in execute self.error_handler.check_response(response) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <selenium.webdriver.remote.errorhandler.ErrorHandler object at 0x1075101d0> response = {'status': 404, 'value': '{"value":{"error":"no such element","message":"Unable to locate element: .item.addon .info >.../content/shared/webdriver/Errors.sys.mjs:507:5\\ndom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:132:16\\n"}}'} def check_response(self, response: Dict[str, Any]) -> None: """ Checks that a JSON response from the WebDriver does not have an error. :Args: - response - The JSON response from the WebDriver server as a dictionary object. :Raises: If the response contains an error message. """ status = response.get('status', None) if not status or status == ErrorCode.SUCCESS: return value = None message = response.get("message", "") screen: str = response.get("screen", "") stacktrace = None if isinstance(status, int): value_json = response.get('value', None) if value_json and isinstance(value_json, str): import json try: value = json.loads(value_json) if len(value.keys()) == 1: value = value['value'] status = value.get('error', None) if not status: status = value.get("status", ErrorCode.UNKNOWN_ERROR) message = value.get("value") or value.get("message") if not isinstance(message, str): value = message message = message.get('message') else: message = value.get('message', None) except ValueError: pass exception_class: Type[WebDriverException] if status in ErrorCode.NO_SUCH_ELEMENT: exception_class = NoSuchElementException elif status in ErrorCode.NO_SUCH_FRAME: exception_class = NoSuchFrameException elif status in ErrorCode.NO_SUCH_SHADOW_ROOT: exception_class = NoSuchShadowRootException elif status in ErrorCode.NO_SUCH_WINDOW: exception_class = NoSuchWindowException elif status in ErrorCode.STALE_ELEMENT_REFERENCE: exception_class = StaleElementReferenceException elif status in ErrorCode.ELEMENT_NOT_VISIBLE: exception_class = ElementNotVisibleException elif status in ErrorCode.INVALID_ELEMENT_STATE: exception_class = InvalidElementStateException elif status in ErrorCode.INVALID_SELECTOR \ or status in ErrorCode.INVALID_XPATH_SELECTOR \ or status in ErrorCode.INVALID_XPATH_SELECTOR_RETURN_TYPER: exception_class = InvalidSelectorException elif status in ErrorCode.ELEMENT_IS_NOT_SELECTABLE: exception_class = ElementNotSelectableException elif status in ErrorCode.ELEMENT_NOT_INTERACTABLE: exception_class = ElementNotInteractableException elif status in ErrorCode.INVALID_COOKIE_DOMAIN: exception_class = InvalidCookieDomainException elif status in ErrorCode.UNABLE_TO_SET_COOKIE: exception_class = UnableToSetCookieException elif status in ErrorCode.TIMEOUT: exception_class = TimeoutException elif status in ErrorCode.SCRIPT_TIMEOUT: exception_class = TimeoutException elif status in ErrorCode.UNKNOWN_ERROR: exception_class = WebDriverException elif status in ErrorCode.UNEXPECTED_ALERT_OPEN: exception_class = UnexpectedAlertPresentException elif status in ErrorCode.NO_ALERT_OPEN: exception_class = NoAlertPresentException elif status in ErrorCode.IME_NOT_AVAILABLE: exception_class = ImeNotAvailableException elif status in ErrorCode.IME_ENGINE_ACTIVATION_FAILED: exception_class = ImeActivationFailedException elif status in ErrorCode.MOVE_TARGET_OUT_OF_BOUNDS: exception_class = MoveTargetOutOfBoundsException elif status in ErrorCode.JAVASCRIPT_ERROR: exception_class = JavascriptException elif status in ErrorCode.SESSION_NOT_CREATED: exception_class = SessionNotCreatedException elif status in ErrorCode.INVALID_ARGUMENT: exception_class = InvalidArgumentException elif status in ErrorCode.NO_SUCH_COOKIE: exception_class = NoSuchCookieException elif status in ErrorCode.UNABLE_TO_CAPTURE_SCREEN: exception_class = ScreenshotException elif status in ErrorCode.ELEMENT_CLICK_INTERCEPTED: exception_class = ElementClickInterceptedException elif status in ErrorCode.INSECURE_CERTIFICATE: exception_class = InsecureCertificateException elif status in ErrorCode.INVALID_COORDINATES: exception_class = InvalidCoordinatesException elif status in ErrorCode.INVALID_SESSION_ID: exception_class = InvalidSessionIdException elif status in ErrorCode.UNKNOWN_METHOD: exception_class = UnknownMethodException else: exception_class = WebDriverException if not value: value = response['value'] if isinstance(value, str): raise exception_class(value) if message == "" and 'message' in value: message = value['message'] screen = None # type: ignore[assignment] if 'screen' in value: screen = value['screen'] stacktrace = None st_value = value.get('stackTrace') or value.get('stacktrace') if st_value: if isinstance(st_value, str): stacktrace = st_value.split('\n') else: stacktrace = [] try: for frame in st_value: line = frame.get("lineNumber", "") file = frame.get("fileName", "<anonymous>") if line: file = f"{file}:{line}" meth = frame.get('methodName', '<anonymous>') if 'className' in frame: meth = "{}.{}".format(frame['className'], meth) msg = " at %s (%s)" msg = msg % (meth, file) stacktrace.append(msg) except TypeError: pass if exception_class == UnexpectedAlertPresentException: alert_text = None if 'data' in value: alert_text = value['data'].get('text') elif 'alert' in value: alert_text = value['alert'].get('text') raise exception_class(message, screen, stacktrace, alert_text) # type: ignore[call-arg] # mypy is not smart enough here > raise exception_class(message, screen, stacktrace) E selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: .item.addon .info > h3 > a E Stacktrace: E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8 E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:189:5 E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:507:5 E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:132:16 venv/lib/python3.11/site-packages/selenium/webdriver/remote/errorhandler.py:243: NoSuchElementException ------------------------------Captured stdout call------------------------------ The "click continue button" event occurred. The script should be on the password input screen here. We should see "Sign in" in the header. The card header title is "Enter your password for your Mozilla account" --------------------------------pytest-selenium--------------------------------- Driver log: /private/var/folders/v_/6jd_d5kn7ss0v8hd92jqglz80000gq/T/pytest-of-alexandru.schek/pytest-1/test_submit_listed_wizard_them0/driver.log WARNING: Failed to gather URL: HTTPConnectionPool(host='localhost', port=55838): Max retries exceeded with url: /session/7a287e33-2e39-4c7c-88f2-99050eef5408/url (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x107a6be90>: Failed to establish a new connection: [Errno 61] Connection refused')) WARNING: Failed to gather screenshot: HTTPConnectionPool(host='localhost', port=55838): Max retries exceeded with url: /session/7a287e33-2e39-4c7c-88f2-99050eef5408/screenshot (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x107a69890>: Failed to establish a new connection: [Errno 61] Connection refused')) WARNING: Failed to gather HTML: HTTPConnectionPool(host='localhost', port=55838): Max retries exceeded with url: /session/7a287e33-2e39-4c7c-88f2-99050eef5408/source (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x108a1c510>: Failed to establish a new connection: [Errno 61] Connection refused')) WARNING: Failed to gather log types: HTTPConnectionPool(host='localhost', port=55838): Max retries exceeded with url: /session/7a287e33-2e39-4c7c-88f2-99050eef5408/se/log/types (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x108a1ec50>: Failed to establish a new connection: [Errno 61] Connection refused')) | |||
| Failed | tests/devhub_submissions/test_addon_submissions.py::test_submit_listed_addon_tc_id_c4369[Desktop] | 39.35 | Driver Log URL HTML |
|
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="8a3ad2ed-7f96-464f-a386-6b6ed3820bac")>, base_url = 'https://addons.mozilla.org' variables = {'addon_validation_message': 'Your add-on was validated with no errors or warnings.', 'addon_with_stats': 'new-tab-override', 'all_scores_addon': 'ublock-origin', 'base_url': 'https://addons.mozilla.org', ...} wait = <[AttributeError("'function' object has no attribute 'session_id'") raised in repr()] WebDriverWait object at 0x1079ad210> @pytest.mark.sanity @pytest.mark.serial @pytest.mark.create_session("submissions_user") @pytest.mark.failing def test_submit_listed_addon_tc_id_c4369(selenium, base_url, variables, wait): """Test covering the process of uploading a listed addon""" page = DevHubHome(selenium, base_url).open().wait_for_page_to_load() > submit_addon = page.click_submit_addon_button() tests/devhub_submissions/test_addon_submissions.py:225: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pages/desktop/developers/devhub_home.py:294: in click_submit_addon_button self.wait_for_element_to_be_clickable(self._submit_addon_button_locator) pages/desktop/base.py:46: in wait_for_element_to_be_clickable self.wait.until(EC.element_to_be_clickable(element)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <selenium.webdriver.support.wait.WebDriverWait (session="8a3ad2ed-7f96-464f-a386-6b6ed3820bac")>, method = <function element_to_be_clickable.<locals>._predicate at 0x107a8fd80>, message = '' def until(self, method, message: str = ""): """Calls the method provided with the driver as an argument until the \ return value does not evaluate to ``False``. :param method: callable(WebDriver) :param message: optional message for :exc:`TimeoutException` :returns: the result of the last call to `method` :raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs """ screen = None stacktrace = None end_time = time.monotonic() + self._timeout while True: try: value = method(self._driver) if value: return value except self._ignored_exceptions as exc: screen = getattr(exc, 'screen', None) stacktrace = getattr(exc, 'stacktrace', None) time.sleep(self._poll) if time.monotonic() > end_time: break > raise TimeoutException(message, screen, stacktrace) E selenium.common.exceptions.TimeoutException: Message: E Stacktrace: E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8 E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:189:5 E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:507:5 E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:132:16 venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException | |||
| Failed | tests/devhub_submissions/test_addon_submissions.py::test_submit_addon_3mb_size_tc_id_c2274214[Desktop] | 35.31 | Driver Log URL HTML |
|
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="a6a4d053-8f00-49a0-9b5d-5b7b7afe30b2")>, base_url = 'https://addons.mozilla.org' wait = <[AttributeError("'function' object has no attribute 'session_id'") raised in repr()] WebDriverWait object at 0x10798f590> variables = {'addon_validation_message': 'Your add-on was validated with no errors or warnings.', 'addon_with_stats': 'new-tab-override', 'all_scores_addon': 'ublock-origin', 'base_url': 'https://addons.mozilla.org', ...} @pytest.mark.sanity @pytest.mark.serial @pytest.mark.create_session("submissions_user") @pytest.mark.failing def test_submit_addon_3mb_size_tc_id_c2274214(selenium, base_url, wait, variables): """Test covering the process of uploading a listed addon with 3-4 mb in size""" page = DevHubHome(selenium, base_url).open().wait_for_page_to_load() > submit_addon = page.click_submit_addon_button() tests/devhub_submissions/test_addon_submissions.py:282: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pages/desktop/developers/devhub_home.py:294: in click_submit_addon_button self.wait_for_element_to_be_clickable(self._submit_addon_button_locator) pages/desktop/base.py:46: in wait_for_element_to_be_clickable self.wait.until(EC.element_to_be_clickable(element)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <selenium.webdriver.support.wait.WebDriverWait (session="a6a4d053-8f00-49a0-9b5d-5b7b7afe30b2")>, method = <function element_to_be_clickable.<locals>._predicate at 0x107a8f6a0>, message = '' def until(self, method, message: str = ""): """Calls the method provided with the driver as an argument until the \ return value does not evaluate to ``False``. :param method: callable(WebDriver) :param message: optional message for :exc:`TimeoutException` :returns: the result of the last call to `method` :raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs """ screen = None stacktrace = None end_time = time.monotonic() + self._timeout while True: try: value = method(self._driver) if value: return value except self._ignored_exceptions as exc: screen = getattr(exc, 'screen', None) stacktrace = getattr(exc, 'stacktrace', None) time.sleep(self._poll) if time.monotonic() > end_time: break > raise TimeoutException(message, screen, stacktrace) E selenium.common.exceptions.TimeoutException: Message: E Stacktrace: E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8 E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:189:5 E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:507:5 E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:132:16 venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException | |||
| Failed | tests/frontend/test_sanity.py::test_about_addons_addon_cards_author_link[Desktop] | 15.30 | Driver Log URL HTML |
|
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="c2e9b803-e9cf-47a3-bb5c-7fa4a83d83f8")>, base_url = 'https://addons.mozilla.org' wait = <[AttributeError("'function' object has no attribute 'session_id'") raised in repr()] WebDriverWait object at 0x108aa8250> @pytest.mark.prod_only @pytest.mark.failing def test_about_addons_addon_cards_author_link(selenium, base_url, wait): selenium.get("about:addons") about_addons = AboutAddons(selenium) # waiting for the addon cards data to be retrieved (the author names in this case) wait.until( lambda _: len([el.disco_addon_author for el in about_addons.addon_cards_items]) >= 7 ) disco_addon_name = about_addons.addon_cards_items[0].disco_addon_name.text # clicking on the author link should open the addon detail page on AMO amo_detail_page = about_addons.addon_cards_items[0].click_disco_addon_author() # checking that the expected detail page was opened > wait.until(lambda _: disco_addon_name == amo_detail_page.name) tests/frontend/test_sanity.py:169: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <[AttributeError("'function' object has no attribute 'session_id'") raised in repr()] WebDriverWait object at 0x108aa8250> method = <function test_about_addons_addon_cards_author_link.<locals>.<lambda> at 0x107b11a80>, message = '' def until(self, method, message: str = ""): """Calls the method provided with the driver as an argument until the \ return value does not evaluate to ``False``. :param method: callable(WebDriver) :param message: optional message for :exc:`TimeoutException` :returns: the result of the last call to `method` :raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs """ screen = None stacktrace = None end_time = time.monotonic() + self._timeout while True: try: value = method(self._driver) if value: return value except self._ignored_exceptions as exc: screen = getattr(exc, 'screen', None) stacktrace = getattr(exc, 'stacktrace', None) time.sleep(self._poll) if time.monotonic() > end_time: break > raise TimeoutException(message, screen, stacktrace) E selenium.common.exceptions.TimeoutException: Message: E Stacktrace: E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8 E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:189:5 E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:507:5 E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:132:16 venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException | |||